package com.kj.tms.common.utils.date;

import com.kj.tms.common.utils.StringUtil;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;


/**
 * <p>公共方法类</p>
 * <p>提供有关日期的实用方法集</p>
 *
 */

public class DateUtil {
	//短日期格式
	public static String shortFormatter = "yyyyMMdd";
	//短日期格式，横线（-）分隔符
	public static String shortFormatterSplit = "yyyy-MM-dd";
	//中文短日期
	public static String shortFormatterZh = "yyyy年MM月dd日";
	//长日期格式
	public static String longFormatter = "yyyyMMddHHmmss";
	//长日期格式，横线（-分隔符）
	public static String longFormatterSplit = "yyyy-MM-dd HH:mm:ss";

	public static SimpleDateFormat sdfShortU = new SimpleDateFormat("MMM dd",Locale.ENGLISH);
	public static SimpleDateFormat sdfLongU = new SimpleDateFormat("MMM dd,yyyy",Locale.ENGLISH);
	public static SimpleDateFormat sdfShortLongTimePlusCn = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
	public static SimpleDateFormat sdfLongTimePlusMill = new SimpleDateFormat("yyyyMMddHHmmssSSSS");
	public static SimpleDateFormat sdfMd = new SimpleDateFormat("MM月dd日");
	private static long DAY_IN_MILLISECOND = 0x5265c00L;

    /**
     * 使用默认格式[yyyy-MM-dd HH:mm:ss] 对日期进行格式化
     * @param date 日期
     * @return 格式化后的字符串形式日期表达式
     */
    public static String format(Date date) {
        return getFormattedDateUtil(date, longFormatterSplit);
    }

	public static String getFormattedDateUtil(Date dtDate, String strFormatTo) {
		if (dtDate == null) {
			return "";
		}
		strFormatTo = strFormatTo.replace('/', '-');
		try {
			SimpleDateFormat formatter = new SimpleDateFormat(strFormatTo);
			return formatter.format(dtDate);
		}
		catch (Exception e) {
			//Common.printLog("转换日期字符串格式时出错;" + e.getMessage());
			return "";
		}
	}

    /**
    * 使用默认格式[yyyy-MM-dd HH:mm:ss] 对日期字符串进行解析
     * @param date 日期的字符表达式
     * @return 日期对象
     */
    public static Date parse(String date) {
        return getDateFromDateStr(date, longFormatterSplit);
    }

	/**
	 * 将日期字符串转换为制定格式日期
	 * @param dateStr
	 * @param formatter
	 * @return
	 */
	public static Date getDateFromDateStr(String dateStr, String formatter) {
		if (StringUtil.isEmptyOrNull(dateStr)) {
			return null;
		}
		if(StringUtil.isEmptyOrNull(formatter)) {
			formatter = longFormatterSplit;
		}
		Date date = null;

		try {
			SimpleDateFormat sdf = new SimpleDateFormat(formatter);
			date = sdf.parse(dateStr);

		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}

}
